home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 11
/
Cream of the Crop 11-1.iso
/
program
/
swmp141.zip
/
PAS_SDK.ZIP
/
MODPLAY.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1995-12-12
|
4KB
|
211 lines
{* ╓──────────────────────────────────────────────────╖ *}
{* ║ SOUND WIZARDS MODULE PLAYER V1.41 BY LORD EXCESS ║ *}
{* ╙──────────────────────────────────────────────────╜ *}
UNIT MODPLAY;
INTERFACE
CONST Detection = 0;
SoundBlaster = 1;
SoundBlaster_Pro = 2;
Gravis_UltraSound = 3;
VAR Soundcard: WORD;
Channels: WORD;
Peak: ARRAY [1..8] OF BYTE;
PROCEDURE Mod_Init(Driver,Port: WORD; IRQ,DMA: BYTE);
PROCEDURE Mod_Load(File_Name: STRING);
PROCEDURE Mod_Play(Looping: WORD);
PROCEDURE Mod_Stop;
PROCEDURE Mod_Volume(Volume: BYTE);
FUNCTION Mod_Status: WORD;
FUNCTION Mod_Position: WORD;
PROCEDURE Mod_Rewind;
PROCEDURE Mod_Forward;
PROCEDURE Mod_Peak;
IMPLEMENTATION
USES DETECT,SB_DRV,SBP_DRV,GUS_DRV;
VAR Mod_Driver,Old_Exit: POINTER;
Mod_File: STRING[128];
PROCEDURE Mod_Close; FAR; ASSEMBLER; {* do not call this procedure! *}
ASM
mov ax,WORD PTR [Old_Exit]
mov dx,WORD PTR [Old_Exit+2]
mov WORD PTR [ExitProc],ax
mov WORD PTR [ExitProc+2],dx
mov bx,1
call DWORD PTR [Mod_Driver]
END;
PROCEDURE Mod_Init(Driver,Port: WORD; IRQ,DMA: BYTE); ASSEMBLER;
ASM
mov ax,[Driver]
or ax,ax
jz @@1
cmp ax,Gravis_UltraSound
ja @@Error
mov cl,BYTE PTR [IRQ]
mov ch,BYTE PTR [DMA]
mov dx,[Port]
jmp @@2
@@1:
call FAR PTR Detect_Hardware
or ax,ax
jz @@Error
cmp ax,Gravis_UltraSound
ja @@Error
@@2:
mov [Soundcard],ax
mov WORD PTR [Mod_Driver],0
cmp ax,SoundBlaster
jnz @@3
mov WORD PTR [Mod_Driver+2],SEG Driver_SB
jmp @@Test
@@3:
cmp ax,SoundBlaster_Pro
jnz @@4
mov WORD PTR [Mod_Driver+2],SEG Driver_SBP
jmp @@Test
@@4:
mov WORD PTR [Mod_Driver+2],SEG Driver_GUS
@@Test:
xor bx,bx
call DWORD PTR [Mod_Driver]
or ax,ax
jz @@Error
mov ax,WORD PTR [ExitProc]
mov dx,WORD PTR [ExitProc+2]
mov WORD PTR [Old_Exit],ax
mov WORD PTR [Old_Exit+2],dx
mov WORD PTR [ExitProc],OFFSET Mod_Close
mov WORD PTR [ExitProc+2],SEG Mod_Close
jmp @@Out
@@Error:
mov [Soundcard],0
@@Out:
END;
PROCEDURE Mod_Load(File_Name: STRING); ASSEMBLER;
ASM
mov ax,[Soundcard]
or ax,ax
jz @@Out
cld
mov ax,ds
mov es,ax
lds si,DWORD PTR [File_Name]
lodsb
mov cl,al
and cx,7Fh
mov dx,OFFSET Mod_File
mov di,dx
rep movsb
xor al,al
stosb
mov ax,es
mov ds,ax
mov bx,2
call DWORD PTR [Mod_Driver]
@@Out:
mov [Channels],ax
END;
PROCEDURE Mod_Play(Looping: WORD); ASSEMBLER;
ASM
cmp [Soundcard],0
jz @@Out
mov bx,3
mov ax,[Looping]
call DWORD PTR [Mod_Driver]
@@Out:
END;
PROCEDURE Mod_Stop; ASSEMBLER;
ASM
cmp [Soundcard],0
jz @@Out
mov bx,4
call DWORD PTR [Mod_Driver]
@@Out:
END;
PROCEDURE Mod_Volume(Volume: BYTE); ASSEMBLER;
ASM
cmp [Soundcard],0
jz @@Out
mov bx,5
mov al,[Volume]
call DWORD PTR [Mod_Driver]
@@Out:
END;
FUNCTION Mod_Status: WORD; ASSEMBLER;
ASM
mov ax,[Soundcard]
or ax,ax
jz @@Out
mov bx,6
call DWORD PTR [Mod_Driver]
@@Out:
END;
FUNCTION Mod_Position: WORD; ASSEMBLER;
ASM
mov ax,[Soundcard]
or ax,ax
jz @@Out
mov bx,7
xor al,al
call DWORD PTR [Mod_Driver]
@@Out:
END;
PROCEDURE Mod_Rewind; ASSEMBLER;
ASM
cmp [Soundcard],0
jz @@Out
mov bx,7
mov al,-1
call DWORD PTR [Mod_Driver]
@@Out:
END;
PROCEDURE Mod_Forward; ASSEMBLER;
ASM
cmp [Soundcard],0
jz @@Out
mov bx,7
mov al,1
call DWORD PTR [Mod_Driver]
@@Out:
END;
PROCEDURE Mod_Peak; ASSEMBLER;
ASM
push es
mov ax,ds
mov es,ax
mov di,OFFSET Peak
cmp [Soundcard],0
jnz @@Ok
cld
mov cx,4
xor ax,ax
rep stosw
jmp @@Out
@@Ok:
mov bx,8
call DWORD PTR [Mod_Driver]
@@Out:
pop es
END;
END.